package com.hc.demo_api820.service;

import com.hc.demo_api820.domain.Users;
import com.hc.demo_api820.dto.ResultResponse;
import com.hc.demo_api820.exception.TijianException;
import com.hc.demo_api820.exception.TijianExceptionEnum;
import com.hc.demo_api820.mapper.UsersMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceIpml implements UserService {
    @Autowired
    UsersMapper usersMapper;

    /**
     * 登录接口
     * 业务逻辑：Controller--》service--》Mapper
     * ①拿着手机号查询数据库看有没有这个用户，没有抛出异常，改手机号尚未注册
     * ②有该用户则进一步核对密码：密码错误，抛出异常，密码错误请重新登录
     * ③前面两关都过了，则用户合法，返回登录成功
     * */

    @Override
    public ResultResponse login(Users users){
        ResultResponse resultResponse = null;
//        int a= 12/0;
        Users user= usersMapper.selectByPrimaryKey(users.getUserId());
        if (user==null){
            //抛出异常：该手机号尚未注册
            //throw new Exception
            //需要定制异常类型
            throw new TijianException(TijianExceptionEnum.MOBILE_NOT_REGISTER.getEnCode(), TijianExceptionEnum.MOBILE_NOT_REGISTER.getEnMessage());
        }
        if (!user.getPassword().equals(users.getPassword())){
            //抛出异常，密码错误请重新登录
            throw new TijianException(TijianExceptionEnum.RASSWORD_IS_WRONG.getEnCode(),TijianExceptionEnum.RASSWORD_IS_WRONG.getEnMessage() );
        }
//        隐藏密码
        user.setPassword("*****");
//        resultResponse = new ResultResponse(200,"ops success");
        resultResponse = new ResultResponse(ResultResponse.SUCCESS_CODE,ResultResponse.SUCCESS_DESC,user);
        return resultResponse;
    //思考：前面程序一旦抛出异常，代码就不会往下执行了，并且系统生病了，那么还能发挥前端响应嘛？怎么办？
    //SpringBoot用全局异常处理器解决上面的问题：1.处理所有异常，2.能够
    }

    /**
     * 注册功能
     * */

    @Override
    public ResultResponse register(Users users) {
        //没有做非空校验，主要是因为希望前端去做非空校验======》你们能做就做，统一抛出异常 1008 参数错误
//        if (users.getUserId() == null || "".equals(users.getUserId()) || users.getPassword() == null || "".equals(users.getPassword())){
//            throw new TijianException(TijianExceptionEnum.PARAMETER_FORMAT_ERROR.getEnCode(), TijianExceptionEnum.PARAMETER_FORMAT_ERROR.getEnMessage());
//        }

        //此处没有做手机号是否已经注册校验，建议大家把它补充进来  1003--系统出错
        Users user =usersMapper.selectByPrimaryKey(users.getUserId());

        if (user!=null){
            throw new TijianException(TijianExceptionEnum.MOBILE_ALREADY_REGISTER.getEnCode(), TijianExceptionEnum.MOBILE_ALREADY_REGISTER.getEnMessage());
        }

        usersMapper.insert(users); //落库
        return new ResultResponse(ResultResponse.SUCCESS_CODE,ResultResponse.SUCCESS_DESC);
    }

    @Override
    public ResultResponse validatePhone(String userId) {
        Users users = usersMapper.selectByPrimaryKey(userId);
        if (users==null){
            return new ResultResponse(TijianExceptionEnum.MOBILE_NOT_REGISTER.getEnCode(), TijianExceptionEnum.MOBILE_NOT_REGISTER.getEnMessage(),null);
        }else {
            return new ResultResponse(ResultResponse.SUCCESS_CODE,ResultResponse.SUCCESS_DESC,null);
        }

    }
}
